﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business.Entities;
using Business.Logic;

namespace UI.Desktop
{
    public partial class ComisionesDesktop : ApplicationForm
    {
        private List<Plan> _ListaPlanes;

        public List<Plan> ListaPlanes
        {
            get { return _ListaPlanes; }
            set { _ListaPlanes = value; }
        }

        private Comision _ComisionActual;

        public Comision ComisionActual
        {
            get { return _ComisionActual; }
            set { _ComisionActual = value; }
        }

        #region Constructores

        public ComisionesDesktop()
        {
            InitializeComponent();
        }

        public ComisionesDesktop(ModoForm modo, List<Plan> Lista): this()
        {
            ListaPlanes = Lista;
            this.Modo = modo;
            MapearDeDatos();
        }

        public ComisionesDesktop(int ID, ModoForm modo, List<Plan> Lista): this()
        {
            try
            {
                ListaPlanes = Lista;
                this.Modo = modo;
                ComisionLogic comLog = new ComisionLogic();
                ComisionActual = comLog.GetOne(ID);
                MapearDeDatos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                this.Close();
            }
        }

        #endregion

     
        #region Eventos

        private void ComisionesDesktop_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'tp2_netDataSet7.planes' Puede moverla o quitarla según sea necesario.
            this.planesTableAdapter.Fill(this.tp2_netDataSet7.planes);
            // TODO: esta línea de código carga datos en la tabla 'tp2_netDataSet6.especialidades' Puede moverla o quitarla según sea necesario.
            this.especialidadesTableAdapter.Fill(this.tp2_netDataSet6.especialidades);

            foreach (Plan p in ListaPlanes)
            {
                cmbIDPlan.Items.Add(p.Descripcion);
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.Modo != ModoForm.Consulta)
                {
                    if (Validar())
                    {
                        MapearADatos();
                        GuardarCambios();
                        switch (Modo)
                        {
                            case ModoForm.Alta:
                                MessageBox.Show("La Comisión fue registrada correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                                break;
                            case ModoForm.Modifica:
                                MessageBox.Show("La Comisión fue modificada correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                                this.Close();
                                break;
                            case ModoForm.Baja:
                                MessageBox.Show("La Comisión fue eliminada correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                                this.Close();
                                break;
                        }
                        btnCancelar.Text = "Cerrar";
                    }
                }
                else
                {
                    MapearADatos();
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion


        #region Métodos

        protected override void MapearADatos()
        {
            try
            {
                switch (Modo)
                {
                    case ModoForm.Alta:
                        Comision comAct = new Comision();
                        comAct.Descripcion = txtDescrip.Text;
                        comAct.AnioEspecialidad = int.Parse(cmbAnioEsp.Text.Trim());
                        comAct.IDPlan = BuscarIdPlan();
                        comAct.State = Comision.States.New;
                        ComisionActual = comAct;
                        btnAceptar.Text = "Guardar";
                        break;
                    case ModoForm.Modifica:
                        ComisionActual.Descripcion = txtDescrip.Text;
                        ComisionActual.AnioEspecialidad = int.Parse(cmbAnioEsp.Text.Trim());
                        ComisionActual.IDPlan = BuscarIdPlan();
                        ComisionActual.State = Comision.States.Modified;
                        btnAceptar.Text = "Guardar Cambios";
                        break;
                    case ModoForm.Baja:
                        ComisionActual.ID = Convert.ToInt32(txtID.Text.Trim());
                        ComisionActual.State = Comision.States.Deleted;
                        btnAceptar.Text = "Eliminar";
                        break;
                }
            }
            catch (FormatException fe)
            {
                throw fe;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private string BuscarPlan()
        {
            string DescPlan = "";
            foreach (Plan p in ListaPlanes)
            {
                if (ComisionActual.IDPlan == p.ID)
                {
                    DescPlan = p.Descripcion;
                }
            }
            return DescPlan;
        }

        private int BuscarIdPlan()
        {
            int idPlan = 0;
            foreach (Plan p in ListaPlanes)
            {
                if (cmbIDPlan.Text.Trim() == p.Descripcion)
                {
                    idPlan = p.ID;
                }
            }
            return idPlan;
        }

        protected override void MapearDeDatos()
        {
            if (ModoForm.Alta != Modo)
            {
                this.txtID.Text = Convert.ToString(ComisionActual.ID);
                txtDescrip.Text = ComisionActual.Descripcion;
                cmbAnioEsp.Text = Convert.ToString(ComisionActual.AnioEspecialidad);
                cmbIDPlan.Text = BuscarPlan();
            }
            else btnAceptar.Text = "Guardar";

            switch (Modo)
            { 
                case ModoForm.Baja:
                    txtID.ReadOnly = true;
                    txtDescrip.ReadOnly = true;
                    cmbIDPlan.Enabled = false;
                    cmbAnioEsp.Enabled = false;
                    btnAceptar.Text = "Eliminar";
                    break;
                case ModoForm.Modifica:              
                    btnAceptar.Text = "Guardar Cambios";
                    break;           
                case ModoForm.Consulta:
                    txtDescrip.ReadOnly = true;
                    cmbIDPlan.Enabled = false;
                    cmbAnioEsp.Enabled = false;
                    btnAceptar.Text = "Aceptar";
                    break;
            }

        }


        protected override void GuardarCambios()
        {
            try
            {
                ComisionLogic comLog = new ComisionLogic();
                if (Modo != ModoForm.Baja)
                {
                    comLog.Save(ComisionActual);
                }
                else
                {
                    comLog.Delete(ComisionActual);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        protected override bool Validar()
        {
            ValidacionesEspeciales val = new ValidacionesEspeciales();
            string mensaje = "";
            if (txtDescrip.Text == "")
                mensaje += "- Debe completar el campo Descripcion" + "\n";
            if (!val.TipoValidacion(ValidacionesEspeciales.Tipos.esMenor50, txtDescrip.Text.Trim()))
                mensaje += "- El campo Descripción tiene más de 50 caracteres" + "\n";

            if (this.cmbAnioEsp.Text == "")
                mensaje += "- Debe elegir un Anio de especialidad\n";

            if (this.cmbIDPlan.Text == "")
                mensaje += "- Debe elegir un Anio de especialidad\n";

            if (mensaje == "")
                return true;
            else
            {
                MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
        }

        
        #endregion
    }
}
